/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servlets;

import Conexao.ConsultaBD;
import Entidade.Agendamento;
import Entidade.AgendamentoEmail;
import Entidade.AgendamentoEquipamento;
import Entidade.Configuracoes;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.mail.SimpleEmail;



/**
 *
 * @author Usuario
 */
public class enviarEmailServlet extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     * 
     * 
     */
    
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    SimpleDateFormat sdfHora = new SimpleDateFormat("hh:mm");
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        RequestDispatcher rd;
        try {
            
            Object objConf = ConsultaBD.SelecionarFrom("Configuracoes");
            
            
            String tipo1 = request.getParameter("tipo1");
            String tipo2 = request.getParameter("tipo2");
            String tipo3 = request.getParameter("tipo3");
            
            
            if(tipo1.equals("convite"))
            {
            
            List<Object> ListAgendamentoObj = ConsultaBD.ListaFrom("AgendamentoEmail where agendamento = " + request.getParameter("id_agenda"));
                
            for(Object o : ListAgendamentoObj)
            {
                try{
                
                SimpleEmail email = new SimpleEmail(); 

                email.setDebug(true);

                email.setHostName(((Configuracoes)objConf).getSmtp()); // O servidor SMTP para envio do e-mail     

                email.addTo(((AgendamentoEmail)o).getEmail(), ((AgendamentoEmail)o).getEmail()); // Destinatário 

                email.setFrom(((Configuracoes)objConf).getRemetente(), "Workflow SAS - Agendamento de Sala"); // Remetente  

                email.setSubject("Workflow SAS - Convite de participação"); // Assunto do e-mail  

                String mensagem = "Novo Agendamento criado no Sistema de Agendamento de Salas \n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "Você foi convidado(a) por: " + ((AgendamentoEmail)o).getAgendamento().getSolicitante_nome() + ", para participar de: \n\r"
                + "Evento: " + ((AgendamentoEmail)o).getAgendamento().getEvento() + " \n\r"
                + "Local: " + ((AgendamentoEmail)o).getAgendamento().getSala().getNome() + "  Observação: " + ((AgendamentoEmail)o).getAgendamento().getSala().getObservacao() + " \n\r"
                + "Data Inicio: "+sdf.format(((AgendamentoEmail)o).getAgendamento().getData_inicio())+"  Data Fim: "+sdf.format(((AgendamentoEmail)o).getAgendamento().getData_fim())+" \n\r"
                + "Horário Início: "+((AgendamentoEmail)o).getAgendamento().getHora_inicio()+ ":00" + "  Horário Fim: "+((AgendamentoEmail)o).getAgendamento().getHora_fim() + ":00" +" \n\r"
                + "Observação: "+ ((AgendamentoEmail)o).getAgendamento().getObservacao() +" \n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "*Workflow SAS - Mensagem automática, favor não responder este e-mail."; // Texto

                email.setContent(mensagem, "text/plain; charset=UTF-8"); // Texto tipo

                email.setMsg(mensagem); // Conteudo do e-mail  

                email.setAuthentication(((Configuracoes)objConf).getUsuario_email(), ((Configuracoes)objConf).getSenha_email());  // Usuario e senha

                email.setSmtpPort(587); // Porta para enviar

                email.setSSL(false);  

                email.setTLS(false);

                email.send(); 
        
                rd = request.getRequestDispatcher("agendamentos.jsp");
                rd.include(request, response);
                
                }catch(Exception e){

                    String erro = "<script>"
                        + "alert('Erro: " + e.getMessage() + "');"
                        + "</script>";
                        
                out.print(erro);
                }
              }
            }
            
            
            if(tipo2.equals("solicitante"))
            {
                Object agendaObj = ConsultaBD.SelecionarFrom("Agendamento where id =" + request.getParameter("id_agenda"));
                
                List<Object> listConviteObj = ConsultaBD.ListaFrom("AgendamentoEmail where agendamento =" + request.getParameter("id_agenda"));
                List<Object> listEquipObj = ConsultaBD.ListaFrom("AgendamentoEquipamento where agendamento = " + request.getParameter("id_agenda"));
                 
                String listaConvidados ="";
                String listaEquipamentos ="";
                
                if(agendaObj !=  null)
                {
                    
                 try {
                     
                   if(!listConviteObj.isEmpty())
                   {
                       
                       for(Object o : listConviteObj)
                       {
                           listaConvidados += " - " +((AgendamentoEmail)o).getEmail();
                       }
                       
                   }
                   
                   if(!listEquipObj.isEmpty())
                   {
                       for(Object o : listEquipObj)
                       {
                           listaEquipamentos += " - " + ((AgendamentoEquipamento)o).getEquipamento().getDescricao();
                       }
                   }
                     
                        
                SimpleEmail email = new SimpleEmail(); 

                email.setDebug(true);

                email.setHostName(((Configuracoes)objConf).getSmtp()); // O servidor SMTP para envio do e-mail     

                email.addTo(((Agendamento)agendaObj).getSolicitante_email(), ((Agendamento)agendaObj).getSolicitante_nome()); // Destinatário 

                email.setFrom(((Configuracoes)objConf).getRemetente(), "Workflow SAS - Agendamento de Sala"); // Remetente  

                email.setSubject("Workflow SAS - Novo Agendamento"); // Assunto do e-mail  

                String mensagem = "Novo Agendamento criado no Sistema de Agendamento de Salas \n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "Seu evento: " + ((Agendamento)agendaObj).getEvento() + ", foi gravado com sucesso! \n\r"
                + "Para o local: " + ((Agendamento)agendaObj).getSala().getNome() + "  Observação: " + ((Agendamento)agendaObj).getSala().getObservacao() + " \n\r"
                + "Com Data de Início: "+sdf.format(((Agendamento)agendaObj).getData_inicio())+" e Data Final: "+sdf.format(((Agendamento)agendaObj).getData_fim())+" \n\r"
                + "Com Horário de Início às: "+((Agendamento)agendaObj).getHora_inicio()+ ":00" + " e Horário Final às: "+((Agendamento)agendaObj).getHora_fim() + ":00" +" \n\r"
                + "Observação: "+ ((Agendamento)agendaObj).getObservacao() +" \n\r"    
                + "--------------------------------------------------------------------------\n\r"
                + "Notificados por e-mail: " + listaConvidados + " \n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "Equipamentos reservados (Pode depender de disponibilidade): " + listaEquipamentos + " \n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "Caso queira excluir o agendamento, consulte o mesmo no Portal SAS e utilize o seguinte código de autenticação: " + ((Agendamento) agendaObj).getAutenticador() + "\n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "*Workflow SAS - Mensagem automática, favor não responder este e-mail."; // Texto

                email.setContent(mensagem, "text/plain; charset=UTF-8"); // Texto tipo

                email.setMsg(mensagem); // Conteudo do e-mail  

                email.setAuthentication(((Configuracoes)objConf).getUsuario_email(), ((Configuracoes)objConf).getSenha_email());  // Usuario e senha

                email.setSmtpPort(587); // Porta para enviar

                email.setSSL(false);  

                email.setTLS(false);

                email.send(); 
        
                rd = request.getRequestDispatcher("agendamentos.jsp");
                rd.include(request, response);
                        
                    } catch (Exception e) {
                         String erro = "<script>"
                        + "alert('Erro: " + e.getMessage() + "');"
                        + "</script>";
                        
                out.print(erro);
                    }
                    
                }

            }
            
            
            if(tipo3.equals("notificacao"))
            {
                                   
                 try {
                     
                Object agendaObj = ConsultaBD.SelecionarFrom("Agendamento where id =" + request.getParameter("id_agenda"));
                
                List<Object> listConviteObj = ConsultaBD.ListaFrom("AgendamentoEmail where agendamento =" + request.getParameter("id_agenda"));
                List<Object> listEquipObj = ConsultaBD.ListaFrom("AgendamentoEquipamento where agendamento = " + request.getParameter("id_agenda"));
                 
                String listaConvidados ="";
                String listaEquipamentos ="";
                     
                   if(!listConviteObj.isEmpty())
                   {
                       
                       for(Object o : listConviteObj)
                       {
                           listaConvidados += " - " +((AgendamentoEmail)o).getEmail();
                       }
                       
                   }
                   
                   if(!listEquipObj.isEmpty())
                   {
                       for(Object o : listEquipObj)
                       {
                           listaEquipamentos += " - " + ((AgendamentoEquipamento)o).getEquipamento().getDescricao();
                       }
                   }
                     
                        
                SimpleEmail email = new SimpleEmail(); 

                email.setDebug(true);

                email.setHostName(((Configuracoes)objConf).getSmtp()); // O servidor SMTP para envio do e-mail     

                email.addTo(((Configuracoes)objConf).getEmail_notificacao(), "Dep. de Tecnologia da Informação"); // Destinatário 

                email.setFrom(((Configuracoes)objConf).getRemetente(), "Workflow SAS - Agendamento de Sala"); // Remetente  

                email.setSubject("Workflow SAS - Novo Agendamento Criado"); // Assunto do e-mail  

                String mensagem = "Novo Agendamento criado no Sistema de Agendamento de Salas \n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "Foi criado o evento: " + ((Agendamento)agendaObj).getEvento() + " \n\r"
                + "Por: " + ((Agendamento)agendaObj).getSolicitante_nome() + "\n\r"
                + "Local: " + ((Agendamento)agendaObj).getSala().getNome() + "  Observação: " + ((Agendamento)agendaObj).getSala().getObservacao() + " \n\r"
                + "Data de Início: "+sdf.format(((Agendamento)agendaObj).getData_inicio())+" e Data Final: "+sdf.format(((Agendamento)agendaObj).getData_fim())+" \n\r"
                + "Horário de Início: "+((Agendamento)agendaObj).getHora_inicio()+ ":00" + " e Horário Final: "+((Agendamento)agendaObj).getHora_fim() + ":00" +" \n\r"
                + "Observação: "+ ((Agendamento)agendaObj).getObservacao() +" \n\r"    
                + "--------------------------------------------------------------------------\n\r"
                + "Notificados por e-mail: " + listaConvidados + " \n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "Equipamentos reservados (Pode depender de disponibilidade): " + listaEquipamentos + " \n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "Caso queira excluir o agendamento, consulte o mesmo no Portal SAS e utilize o seguinte código de autenticação: " + ((Agendamento) agendaObj).getAutenticador() + "\n\r"
                + "--------------------------------------------------------------------------\n\r"
                + "*Workflow SAS - Mensagem automática, favor não responder este e-mail."; // Texto

                email.setContent(mensagem, "text/plain; charset=UTF-8"); // Texto tipo

                email.setMsg(mensagem); // Conteudo do e-mail  

                email.setAuthentication(((Configuracoes)objConf).getUsuario_email(), ((Configuracoes)objConf).getSenha_email());  // Usuario e senha

                email.setSmtpPort(587); // Porta para enviar

                email.setSSL(false);  

                email.setTLS(false);

                email.send(); 
        

                rd = request.getRequestDispatcher("agendamentos.jsp");
                rd.include(request, response);
                        
                    } catch (Exception e) {
                         String erro = "<script>"
                        + "alert('Erro: " + e.getMessage() + "');"
                        + "</script>";
                        
                out.print(erro);
                    }
                    
                }
            
        } finally {  
            out.close();
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
